package com.mf.ergate.web.service.auth;

import com.mf.ergate.api.auth.model.dto.*;
import com.mf.ergate.api.auth.model.vo.RoleInfoVo;
import com.mf.ergate.api.auth.model.vo.RoleUserRelationVo;
import com.mf.ergate.api.auth.model.vo.UserInfoVo;
import com.mf.framework.common.model.Page;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 用户信息Service层接口类
 * User: zhaoming
 * DateTime: 2019-02-12
 * To change this template use File | Settings | File Templates.
 **/
public interface UserInfoService{

    /**
     * 新增
     * @param userInfoCreateDto 用户信息新增Dto
     * @param file 用户头像
     * @return 用户信息
     */
    UserInfoVo insert(UserInfoCreateDto userInfoCreateDto, MultipartFile file);
    
    /**
     * 根据唯一编号更新
     * @param userInfoUpdateDto 用户信息更新Dto
     * @param file 用户头像
     * @return 执行结果
     */
    Boolean updateByUniqueNo(UserInfoUpdateDto userInfoUpdateDto, MultipartFile file);
    
    /**
     * 根据唯一编号删除(逻辑删除)
     * @param userInfoDeleteDto 用户信息删除Dto
     * @return 执行结果
     */
    Boolean deleteByUniqueNo(UserInfoDeleteDto userInfoDeleteDto);
    
    /**
     * 根据唯一编号查询
     * @param userInfoNo 用户信息编号
     * @return 用户信息
     */
    UserInfoVo selectByUniqueNo(String userInfoNo);
    
    /**
     * 根据条件查询
     * @param userInfoQueryDto 用户信息查询Dto
     * @return 用户信息列表
     */
    List<UserInfoVo> selectByCondition(UserInfoQueryDto userInfoQueryDto);

    /**
     * 根据条件查询数量
     * @param userInfoQueryDto 用户信息查询Dto
     * @return 数量
     */
    Integer selectCount(UserInfoQueryDto userInfoQueryDto);

    /**
     * 根据条件分页查询
     * @param page 远程分页
     * @param userInfoQueryDto 用户信息查询Dto
     * @return 用户信息分页列表
     */
    Page<UserInfoVo> selectPage(Page page, UserInfoQueryDto userInfoQueryDto);

    /**
     * 删除用户及相关信息(逻辑删除)
     * @param userInfoDeleteDto 用户信息删除Dto
     * @return 执行结果
     */
    Boolean deleteCompleteByUniqueNo(UserInfoDeleteDto userInfoDeleteDto);

    /**
     * 角色与用户关联分页查询
     * @param page 分页实体
     * @param roleUserRelationQueryDto 用户与角色关联查询Dto
     * @return 角色与用户关联分页列表
     */
    Page<RoleUserRelationVo> roleUserRelationPage(Page page, RoleUserRelationQueryDto roleUserRelationQueryDto);

    /**
     * 角色信息分页查询
     * @param page 分页实体
     * @param roleInfoQueryDto 角色信息查询Dto
     * @return 角色信息分页列表
     */
    Page<RoleInfoVo> rolePage(Page page, RoleInfoQueryDto roleInfoQueryDto);

    /**
     * 新增用户与角色关联信息
     * @param roleUserRelationCreateDto 用户与角色关联新增Dto
     * @return 用户与角色关联信息
     */
    RoleUserRelationVo insertRoleUserRelation(RoleUserRelationCreateDto roleUserRelationCreateDto);

    /**
     * 删除用户与角色关联信息
     * @param roleUserRelationDeleteDto 用户与角色关联删除Dto
     * @return 执行结果
     */
    Boolean deleteRoleUserRelation(RoleUserRelationDeleteDto roleUserRelationDeleteDto);
}
